home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / e_to_l / fbuilder / vb / fbcalc.bas
BASIC Source File  |  1996-09-15  |  10KB  |  256 lines

  1. '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. '
  3. ' FORMULABUILDER Version 1.0
  4. ' An Advanced Expression Parsing/Evaluation Engine
  5. ' Copyright (c) 1995 Clayton Collie, All Rights Reserved
  6. '
  7. ' Published by YGB Software, Inc.
  8. ' Contact us via e-mail at 103515.1757@compuserve.com
  9. '
  10. ' Or Write us at
  11. '
  12. ' 161 Pearl St.
  13. ' Paterson, NJ 07501
  14. ' USA
  15. '
  16. '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  17.  
  18.  
  19. ':::::::::::: VB Header for Formula Builder DLL :::::::::::::::::::::
  20.  
  21. Option Explicit
  22.  
  23. Global Const MAXFUNCPARAMS = 16  'Functions can have up to MAXFUNCPARAMS parameters
  24. Global Const vtINTEGER = 0
  25. Global Const vtBOOLEAN = 1
  26. Global Const vtCHAR = 2
  27. Global Const vtFLOAT = 3
  28. Global Const vtSTRING = 4
  29. Global Const vtDATE = 9
  30. Global Const vtBOOL = 10
  31. Global Const vtNONE = 13
  32. Global Const vtTypeClash = 14
  33. Global Const vtTypeMismatch = vtTypeClash
  34.  
  35.  
  36. '*
  37. '*  Error Codes
  38. '*
  39.  
  40. Global Const INVALID_VARIABLE = -9999   '* Arbitrary but (hopefully) unique
  41.  
  42. Global Const EXPR_SUCCESS = 1
  43. Global Const EXPR_MISSING_PAREN = 2
  44. Global Const EXPR_BAD_EXPRESSION = 3
  45. Global Const EXPR_BAD_ASSIGNMENT = 4
  46. Global Const EXPR_UNKNOWN_IDENT = 5
  47. Global Const EXPR_LINE_TOO_LONG = 6
  48. Global Const EXPR_INVALID_TOKEN = 7
  49. Global Const EXPR_INVALID_CHAR = 8
  50. Global Const EXPR_MISSING_PARAM = 9
  51. Global Const EXPR_TYPE_MISMATCH = 10
  52. Global Const EXPR_INVALID_NUMBER = 11
  53. Global Const EXPR_MISSING_VARIABLE = 12
  54. Global Const EXPR_INVALID_VARIABLE = 12
  55. Global Const EXPR_INVALID_FUNCTION = 13
  56. Global Const EXPR_ZERO_DIVISION = 14
  57. Global Const EXPR_STACK_OVERFLOW = 15
  58. Global Const EXPR_UNEXPECTED_EOS = 16
  59. Global Const EXPR_INVALID_DATE = 17
  60. Global Const EXPR_IDENTIFIER_EXPECTED = 18
  61. Global Const EXPR_RANGE_ERROR = 19
  62. Global Const EXPR_DOMAIN_ERROR = 20
  63. Global Const EXPR_MATH_ERROR = 21
  64. Global Const EXPR_FP_OVERFLOW = 22
  65. Global Const EXPR_FP_UNDERFLOW = 23
  66. Global Const EXPR_INT_OVERFLOW = 24
  67. Global Const EXPR_INVALID_OP = 25
  68. Global Const EXPR_VARIABLE_EXPECTED = 26
  69. Global Const EXPR_MISSING_OPERATOR = 27
  70. Global Const EXPR_MISSING_OPERAND = 28
  71. Global Const EXPR_CONSTANT_EXPECTED = 29
  72. Global Const EXPR_DUPLICATE_IDENT = 30
  73. Global Const EXPR_SYNTAX_ERROR = 31
  74. Global Const EXPR_CONVERT_ERROR = 32
  75. Global Const EXPR_INVALID_TYPE = 33
  76. Global Const EXPR_INVALID_HANDLE = 50
  77. Global Const EXPR_INVALID_CALLBACK = 51
  78. Global Const EXPR_FORMULA_TOO_COMPLEX = 54
  79.  
  80.  
  81. ':::::::::::::::Engine initialization and shutdown:::::::::::::
  82.  
  83.   Declare Function FBInitExpression& Lib "FBCALC.DLL" (ByVal Exprdata&)
  84.   Declare Function FBFreeExpression% Lib "FBCALC.DLL" (ByVal handle&)
  85.  
  86. '::::::::::::::::::::: Expression Manipulation ::::::::::::::::::::
  87.  
  88.   Declare Function FBSetExpression% Lib "FBCALC.DLL" (ByVal handle&, ByVal expr$)
  89.  
  90.   Declare Function FBReparseExpression% Lib "FBCALC.DLL" (ByVal handle&)
  91.  
  92.   Declare Function FBClearExpression% Lib "FBCALC.DLL" (ByVal handle&)
  93.  
  94.   Declare Function FBGetExpression% Lib "FBCALC.DLL" (ByVal handle&, ByVal lpszResult$, ByVal maxlen%)
  95.  
  96. '::::::::::::::::::::: Expression Evaluation :::::::::::::::::::::::
  97.  
  98. '******************************************************************
  99. 'determine the result type of the expression. Returns one of the
  100. ' vtXXX constants, vtTYPEMISMATCH for an invalid expression
  101. '******************************************************************
  102.  
  103.   Declare Function FBGetReturnType% Lib "FBCALC.DLL" (ByVal handle&)
  104.  
  105. '*********************************************************************
  106. '  Evaluate the expression, returning a maximum of maxlen characters
  107. '  of the null-terminated string result in the buffer/string pointed to
  108. '  by outbuf
  109. '**********************************************************************
  110.  
  111.  
  112.   Declare Function FBEvaluate% Lib "FBCALC.DLL" (ByVal handle&, ByVal outbuf$, ByVal maxlen%)
  113.  
  114. '*
  115. '* Get Results in native types
  116. '*
  117.  
  118.   Declare Function FBGetStringResult% Lib "FBCALC.DLL" (ByVal handle&, ByVal value$, ByVal maxlen)
  119.   Declare Function FBGetFloatResult% Lib "FBCALC.DLL" (ByVal handle&, value#)
  120.   Declare Function FBGetBooleanResult% Lib "FBCALC.DLL" (ByVal handle&, value%)
  121.   Declare Function FBGetIntResult% Lib "FBCALC.DLL" (ByVal handle&, value&)
  122.   Declare Function FBGetDateResult% Lib "FBCALC.DLL" (ByVal handle&, value#)
  123.  
  124.  
  125. '*************************************************************************
  126. ' Perform a single operation expression evaluation. This is not the most
  127. ' efficient method of evaluation when the expression remains the same
  128. '*************************************************************************
  129.  
  130.   Declare Function EvalExpression% Lib "FBCALC.DLL" (ByVal expr$, retType%, ByVal buf$, ByVal maxlen%)
  131.  
  132. ' ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
  133. ' Internal Variable handling routines. NOTE ! If the variable callbacks are }
  134. ' implemented, the evaluation engine will not see the variables added       }
  135. ' by FBAddvariable                                                          }
  136. ' ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::}
  137.  
  138. ' Add a variable of type Vtype (see vtXXX constants) to the Expression Engine
  139.  
  140.   Declare Function FBAddVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal varname$, ByVal vtype%)
  141.  
  142. '******************************************************************
  143. 'Parse the string expression expr, and create a variable with its
  144. 'type and value
  145. '******************************************************************
  146.  
  147.  Declare Function FBParseAddVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal expr$)
  148.  
  149. '*
  150. '* Set the value of variable vname from the string value
  151. '*
  152.  
  153.   Declare Function FBSetVarFromString% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal value$)
  154.  
  155.   Declare Function FBSetStringVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal value$)
  156.   Declare Function FBSetIntegerVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal value&)
  157.   Declare Function FBSetFloatVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal value#)
  158.   Declare Function FBSetBooleanVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal value%)
  159.   Declare Function FBSetDateVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal value#)
  160.  
  161.  
  162. '*
  163. '*  Get Variable Values
  164. '*
  165.  
  166.   Declare Function FBGetVarAsString% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal value$, ByVal maxlen%)
  167.  
  168.   Declare Function FBGetStringVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, ByVal value$, ByVal maxlen%)
  169.   Declare Function FBGetIntegerVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, value&)
  170.   Declare Function FBGetFloatVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, value#)
  171.   Declare Function FBGetBooleanVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, value%)
  172.   Declare Function FBGetDateVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$, value#)
  173.   Declare Function FBPeekVarVB% Lib "FBCALC.DLL" (ByVal handle&, ByVal vno%, ByVal vname$, ByVal maxnamelen%, vtype%, ByVal value$, ByVal maxvallen%)
  174.  
  175.   Declare Function FBFreeVariable% Lib "FBCALC.DLL" (ByVal handle&, ByVal vname$)
  176.  
  177.   Declare Function FBFreeVariableList% Lib "FBCALC.DLL" (ByVal handle&)
  178.  
  179.   Declare Function FBGetVariableCount% Lib "FBCALC.DLL" (ByVal handle&)
  180.  
  181. ':::::::::::::::::::::::: CONSTANTS :::::::::::::::::::::::::::::::::::'
  182.  
  183.  Declare Function FBParseAddConst% Lib "FBCALC.DLL" (ByVal vname$, ByVal expr$)
  184.  Declare Function FBAddStringConstant% Lib "FBCALC.DLL" (ByVal cname$, ByVal value$)
  185.  Declare Function FBAddDateConstant% Lib "FBCALC.DLL" (ByVal cname$, ByVal value#)
  186.  Declare Function FBAddNumericConstant% Lib "FBCALC.DLL" (ByVal cname$, ByVal value#)
  187.  Declare Function FBAddBooleanConstant% Lib "FBCALC.DLL" (ByVal cname$, ByVal value%)
  188.  Declare Function FBFreeConstant% Lib "FBCALC.DLL" (ByVal cname$)
  189.  Declare Function FBFreeConstants% Lib "FBCALC.DLL" ()
  190.  Declare Function FBGetConstAsString% Lib "FBCALC.DLL" (ByVal handle&, ByVal cname$, ByVal value$, ByVal maxlen%)
  191.  
  192. '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::